/**
 * MatrizReportesNotas.java
 */

 /**
 *  AdSec: Administrador de Secundarias
 *  Copyright (C) 2009 Daniela Ramírez Chaves (dannyrch@gmail.com)
 *  Copyright (C) 2009 Leonel Salazar Valverde (leo87sv@gmail.com)
 *
 *  This file is part of AdSec.
 *  AdSec is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  AdSec is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with AdSec.  If not, see <http://www.gnu.org/licenses/>.
 */

package adsec.entidades.entidadesReportes;

import java.util.LinkedList;
import adsec.entidades.MatriculaEstudiante;


public class MatrizReportesNotas {

    LinkedList<String[]> reportes;
    private int cantPeriodos;
    private String[] columnas;
    private final int columnasFijas = 7;
    private final int inicioPeriodo = 4;
    private final int columnaNivel = 2;
    private final int columnaSeccion = 3;
    private final int columnaTipoMatricula = 1;
    private final int columnaNombreMateria = 0;
    private int columnaNotaAnual;
    private int columnaNotaFinal;
    private int columnaCondicion;
    private int ultimoReporteAgregado = -1;
    private int cantidadColumnas = 0;
    

    public MatrizReportesNotas(int cantidadPeriodos){
        this.cantPeriodos = cantidadPeriodos;
        this.cantidadColumnas = columnasFijas + this.cantPeriodos*2;
        columnas = new String[this.cantidadColumnas];
        this.columnaNotaAnual = this.inicioPeriodo + cantPeriodos*2;
        this.columnaNotaFinal = this.columnaNotaAnual + 1;
        this.columnaCondicion = this.columnaNotaFinal + 1;
        this.llenarHeaderColumnas();
        reportes = new LinkedList<String[]>();
    }

    public void llenarHeaderColumnas(){
        columnas[this.columnaNivel] = "Nivel";
        columnas[this.columnaSeccion] = "Sección";
        columnas[this.columnaNombreMateria] = "Materia";
        columnas[this.columnaTipoMatricula] = "Estado";
        int periodo = 1;
        for(int i = inicioPeriodo; i < this.getCantPeriodos()*2+this.inicioPeriodo; i=i+2){
            columnas[i] = "Nota - " + Integer.toString(periodo);
            columnas[i+1] = "% - " + Integer.toString(periodo);
            periodo++;
        }      
        columnas[this.columnaNotaAnual] = "Nota Anual";
        columnas[this.columnaNotaFinal] = "Nota Final";
        columnas[this.columnaCondicion] = "Condición";
    }

    public String[] getHeader(){
        return this.columnas;
    }

    public String[] getReporte(int i){
        String[] reporte = null;
        if(i < reportes.size() && i >= 0){
            reporte = reportes.get(i);
        }
        return reporte;
    }

    public int cantidadReportes(){
        return this.reportes.size();
    }

    public void agregarReporte(ReporteNotasHogar reporte){
        //si es la misma materia
        if(ultimoReporteAgregado >=0 && reporte.getNombreMateria().equals(
                this.reportes.get(ultimoReporteAgregado)[columnaNombreMateria]) ) {

            int columnaNota = inicioPeriodo + (reporte.getNum_periodo()*2)-2;
            int columnaPorcentaje = columnaNota+1;
            this.reportes.get(ultimoReporteAgregado)[columnaNota] = Double.toString(reporte.getNota());
            this.reportes.get(ultimoReporteAgregado)[columnaPorcentaje] = Double.toString(reporte.getNota()*reporte.getPorcentaje()/100);
        }//fin de if
        else{ // Reportes Nuevos
            ultimoReporteAgregado++;
            String[] rep = new String[this.cantidadColumnas];
            rep[columnaNivel] = Integer.toString(reporte.getNivel());
            rep[columnaSeccion] = Integer.toString(reporte.getNum_seccion());
            rep[columnaNombreMateria] = reporte.getNombreMateria();
            rep[columnaTipoMatricula] = MatriculaEstudiante.tiposMatricula[reporte.getTipoMatricula()];
            int columnaNota = inicioPeriodo+(reporte.getNum_periodo()*2)-2;
            rep[columnaNota] = Double.toString(reporte.getNota());
            rep[columnaNota+1] = Double.toString(reporte.getNota()*reporte.getPorcentaje()/100);
            rep[columnaNotaAnual] = reporte.getNotaAnual() >= 0 ? Double.toString(reporte.getNotaAnual()) : "" ;
            rep[columnaNotaFinal] = reporte.getNotaFinal() >= 0 ? Double.toString(reporte.getNotaFinal()) : "" ;
            rep[columnaCondicion] =  reporte.getCondicion();
            reportes.add(rep);
        }//fin de else
    }//fin de agregarReporte

    /**
     * @return the cantPeriodos
     */
    public int getCantPeriodos() {
        return cantPeriodos;
    }

}//fin de clase MatrizReportesNotas
